package org.example.day03;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO
 * <p>  给定两个整数数组<span>array1</span>、<span>array2</span>，数组元素按升序排列。假设从<span>array1</span>、<span>array2</span>中分别取出一个元素可构成一对元素，现在需要取出<span>k</span>对元素，并对取出的所有元素求和，计算和的最小值<span><br> </span>注意：两对元素如果对应于<span>array1</span>、<span>array2</span>中的两个下标均相同，则视为同一对元素。<span></span>  </p>
 *
 * 给定两个整数数组array1、array2，数组元素按升序排列。
 * 假设从array1、array2中分别取出一个元素可构成一对元素，现在需要取出k对元素，并对取出的所有元素求和，计算和的最小值
 * 注意：两对元素如果对应于array1、array2中的两个下标均相同，则视为同一对元素。
 * @date 2024/3/11 15:22
 */
public class test052 {
    public int minSumOfPairs(int[] array1, int[] array2, int k) {
        // 初始化索引
        int i = 0, j = 0;
        // 初始化结果
        int sum = 0;

        // 遍历k次
        while (k > 0) {
            // 选择两个数组中较小的那个
            int num1 = (i < array1.length) ? array1[i] : Integer.MAX_VALUE;
            int num2 = (j < array2.length) ? array2[j] : Integer.MAX_VALUE;
            sum += Math.min(num1, num2);

            // 更新索引
            if (num1 <= num2) {
                i++;
            } else {
                j++;
            }

            // 次数减一
            k--;
        }

        // 返回结果
        return sum;
    }

    public static void main(String[] args) {
        test052 solution = new test052();
        int[] array1 = {1, 7, 11};
        int[] array2 = {2, 4, 6};
        int k = 3;
        System.out.println(solution.minSumOfPairs(array1, array2, k));  // 输出应为 8，因为(1, 2), (1, 4), (7, 2)的和最小
    }
}